package com.zy.design.pattern.single;

/**
 * @author zhaoyi
 * @date 2021/3/29 14:58
 * 单例模式 - 懒汉式 - 基于静态内部类
 */
public class StaticClassSingle {

    //私有化构造器
    private StaticClassSingle() {
        System.out.println("单例对象StaticClassSingle被创建了====");
    }

    /**
     * 静态内部类，当外部类 StaticClassSingle 被加载的时候，并不会创建 SingletonHolder 实例对象。
     * 只有当调用 getInstance() 方法时，SingletonHolder 才会被加载，这个时候才会创建 instance。
     * instance 的唯一性、创建过程的线程安全性，都由JVM 来保证。所以，这种实现方法既保证了线程安全，又能做到延迟加载
     */
    private static class SingletonHolder {
        private static final StaticClassSingle instance = new StaticClassSingle();
    }

    public static StaticClassSingle getInstance() {
        return SingletonHolder.instance;
    }

    public void sayHello() {
        System.out.println(Thread.currentThread().getName() + " hello " + this);
    }


}
